-- local skynet = require "skynet"
-- local snax = require "skynet.snax"

-- skynet.start(function ()
--     local obj = snax.newservice("simplesnax") --启动simplessnax服务

--     obj.post.hello()  --未更新之前调用一次

--     local r = snax.hotfix(obj, [[

--         function accept.hello(...)
--             print("fix hello", i, gname, ...) --skynet.error不能用了
--         end

--         ]])
--     skynet.error("hotfix return:", r)

--     obj.post.hello() --更新之后再调用一次

--     obj.post.quit() --没更新quit函数，还是能调用

--     skynet.exit()
-- end)


-- testhotfix
-- [:01000010] LAUNCH snlua testhotfix
-- [:01000012] LAUNCH snlua snaxd simplesnax
-- [:01000012] snax server start:
-- [:01000012] hello 10 nengzhong
-- fix hello       nil     nengzhong #热更成功，但是局部变量成了nil，全局变量gname还存在
-- [:01000010] hotfix return: nil
-- [:01000010] KILL self
-- [:01000012] snax server exit:  #热更完quit函数还存在
-- [:01000012] KILL self
-- local变量patch


-- local skynet = require "skynet"
-- local snax = require "skynet.snax"

-- skynet.start(function()
--     local obj = snax.newservice("simplesnax") --启动simplessnax服务

--     obj.post.hello()                          --未更新之前调用一次

--     local r = snax.hotfix(obj, [[
--         local skynet
--         local i
--         function accept.hello(...)
--             skynet.error("fix hello", i, gname, ...)
--         end
--         ]])
--     skynet.error("hotfix return:", r)

--     obj.post.hello() --更新之后再调用一次
--     obj.post.quit()  --没更新quit函数，还是能调用

--     skynet.exit()
-- end)


-- testhotfix
-- [:01000010] LAUNCH snlua testhotfix
-- [:01000012] LAUNCH snlua snaxd simplesnax
-- [:01000012] snax server start:
-- [:01000012] hello 10 nengzhong  #能够读取局部变量了 ，变量skynet,i映射成功
-- [:01000010] hotfix return: nil
-- [:01000010] KILL self
-- [:01000012] fix hello 10 nengzhong
-- [:01000012] snax server exit:
-- [:01000012] KILL self







-- 修改snax服务线上状态
-- patch 中可以包含一个 function hotfix(...) 函数，在 patch 提交后立刻执行。这个函数可以用来查看或修改 snax 服务的线上状态
-- （因为 local 变量会被关联）。hotfix 的函数返回值会传递给 snax.hotfix 的调用者。

local skynet = require "skynet"
local snax = require "skynet.snax"

skynet.start(function()
    local obj = snax.newservice("simplesnax") --启动simplessnax服务

    obj.post.hello()                          --未更新之前调用一次

    local r = snax.hotfix(obj, [[
        local skynet
        local i
        function accept.hello(...)
            skynet.error("fix hello", i, gname, ...)
        end

        function hotfix(...)
            local temp = i
            i = 100
            return temp
        end
        ]])
    skynet.error("hotfix return:", r)

    obj.post.hello() --更新之后再调用一次
    obj.post.quit()  --没更新quit函数，还是能调用
    skynet.exit()
end)

-- testhotfix
-- [:01000010] LAUNCH snlua testhotfix
-- [:01000012] LAUNCH snlua snaxd simplesnax
-- [:01000012] snax server start:
-- [:01000012] hello 10 nengzhong
-- [:01000010] hotfix return: 10
-- [:01000010] KILL self
-- [:01000012] fix hello 100 nengzhong  -- 修改了snax服务线上状态， i = 100
-- [:01000012] snax server exit:
-- [:01000012] KILL self

-- 所以，你也可以提交一个仅包含 hotfix 函数的 patch ，而不修改任何代码。这样的 patch 通常用于查看 snax 服务的内部状态（内部 local 变量的值）
-- 或用于修改它们。

